package com.zzh.partnersys.ai.docreader;

import org.springframework.ai.document.Document;
import org.springframework.ai.reader.ExtractedTextFormatter;
import org.springframework.ai.reader.pdf.PagePdfDocumentReader;
import org.springframework.ai.reader.pdf.ParagraphPdfDocumentReader;
import org.springframework.ai.reader.pdf.config.PdfDocumentReaderConfig;

import java.util.List;

/**
 * @author: zzh
 * @date: 2025/11/17 13:43:26
 * @version: 1.0
 */
public class ReaderUtil {

    /**
     * 读取PDF文件，每页生成一个Document
     * @param resourceUrl PDF文件路径
     * @return List<Document>
     */
    public static List<Document> readDocumentsPDFbyPage(String resourceUrl){
        PagePdfDocumentReader pdfReader = new PagePdfDocumentReader(resourceUrl,
                PdfDocumentReaderConfig.builder()
                        .withPageTopMargin(0)
                        // 文本格式化（删除顶部 0 行文本，删除底部 0 行文本）
                        .withPageExtractedTextFormatter(ExtractedTextFormatter.builder()
                                .withNumberOfTopTextLinesToDelete(0)
                                .withNumberOfBottomTextLinesToDelete(0)
                                .build())
                        .withPagesPerDocument(1)// 3. 核心配置：每个 Document 对应 1 页（默认值）
                        .build());
        List<Document> documentList = pdfReader.read();
        documentList.forEach(System.out::println);
        return documentList;
    }

    /**
     * 读取PDF文件，每段落生成一个Document
     * @param resourceUrl PDF文件路径
     * @return List<Document>
     */
    public static List<Document> readDocumentsPDFbyParagraph(String resourceUrl){
        ParagraphPdfDocumentReader pdfReader = new ParagraphPdfDocumentReader(
                resourceUrl, // 1. PDF 资源路径（支持 classpath:/、file:/、URL）
                PdfDocumentReaderConfig.builder() // 2. 解析配置
                        .withPageTopMargin(0) // 页面顶部边距（单位：磅）：过滤页眉（0=不过滤）
                        .withPageExtractedTextFormatter( // 3. 文本格式化器：清理抽取的文本
                                ExtractedTextFormatter.builder()
                                        .withNumberOfTopTextLinesToDelete(0) // 不删除顶部文本行（保留页眉）
                                        .build()
                        )
//                        .withPagesPerDocument(1) // 4. 兼容配置：强制按页面分组（默认按段落分割，此配置可覆盖）
                        .build()
        );
        List<Document> documentList = pdfReader.read();
        documentList.forEach(System.out::println);
        return documentList;
    }

    /**
     * 读取Markdown文件，每页生成一个Document
     * @param resourceUrl Markdown文件路径
     * @return List<Document>
     */
    public static List<Document> readDocumentsMarkdown(String resourceUrl){
        return null;
    }

}
